\chapter{Цифровые камеры}
\pagenumbering{arabic}

\section{Экспозиция более 30 секунд на цифровой камере: Long-time remote shooting}
Задача: требуется фотографировать с выдержками более 30 секунд ("от руки") и есть необходимость этот процесс автоматизировать.
Решение: при помощи паяльника, доступных электрических компонентов и скрипта на bash можно снимать с длительными выдержками без необходимости стоять с камерой и держать кнопку.


\subsection{Исходные данные}
Имеется цифровая фотокамера Canon EOS 400D, Debian-powered ноутбук и необходимость снимать фотографии с выдержкой более 30 секунд. Если немного погуглить, то можно найти замечательную схему, которую предлагает Michael A. Covington здесь. На всякий случай дублирую её тут:

\includegraphics[width=0.9\linewidth]{pictures/serialcableopto.eps}

Схема прекрасная, но она подходит для Canon EOS 300D, а для 400D нет - если её спаять и попробовать управлять 400D, то затвор будет только подниматься, но не опускаться. То есть нет возможности остановить экспозицию в нужный момент, кроме как выключить камеру.



\subsection{Схема для Canon EOS 400D}
Долго ли, коротко, однако я с коллегой, Алексеем Ропяным, экспериментальным путём выяснили, что закрывает затвор фотоаппарат по сигналу с другого контакта, и Алексей предложил схему изменить вот так:

\includegraphics[width=0.9\linewidth]{pictures/serialcableoptoD400}

И это сработало: наш лабораторный Canon EOS 400D стал открывать и закрывать затвор по команде с компьютера!


\subsection{Необходимые компоненты}
Для того, чтобы спаять шнурок управления камерой, требуется некоторое количество четырёхжильного кабеля (от аудиоаппаратуры или простой телефонный провод), jack на 2.5мм (он же 3/32 inch), указанные на схеме радиоэлементы (можно купить в Chip\&Dip), 9-контактный COM-порт и соответственно переходник USB-COM (чтобы можно было использовать и на современных компьютерах, и на старых), а так же паяльник и немного терпения.

Переходник USB-COM лучше всего брать на чипе Profilic 2303 - это самый распространённый чип и в Линукс работает "из коробки".


\subsection{Программное обеспечение}
Для управления камерой требуется одна маленькая утилита, которую мне подсказали на Астрофоруме (обсуждение велось в теме "Выдержка более 30 сек. через комп?" тут и "Чем Linux полезен ЛА?" здесь).

Программа называется setSerialSignal и её исходник находится здесь. Скомпилировать её GCC, который входит в любой дистрибутив *nix-систем:

\begin{lstlisting}
$ gcc -o setSerialSignal setSerialSignal.c
\end{lstlisting}


Проверялось на системе Debian GNU/Linux v4.0 r.0 "Etch", gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21).

\subsection{Посылаемые сигналы}
Программу собираем и даём ей необходимые права на выполнение, а ниже - сигналы, посылаемые в порт программой, и их передача setSetialSignal:

Сигнал DTR

setSerialSignal /dev/ttyS0 1 0


Сброс сигнала DTR

setSerialSignal /dev/ttyS0 0 0


Сигнал RTS

setSerialSignal /dev/ttyS0 0 1


Сброс сигнала RTS

setSerialSignal /dev/ttyS0 1 1


Всё это обеспечивает вам возможность управления камерой: открытие происходит по сигналу DTR, закрытие - сигналу RTS.


\subsection{Скрипт управления камерой}
Дальше удобно воспользоваться простым скриптом, который написал Евгений Ромас aka BrainBug, но для случая с 400D я скрипт немного поправил, и теперь он выглядит так:
\lstset{language=Bash}
\begin{lstlisting}

#!/bin/bash

for i in `seq $3`; do
{
setSerialSignal /dev/ttyUSB0 0 0 &&
sleep $1 && setSerialSignal /dev/ttyUSB0 0 1 &&
sleep 0.3 && setSerialSignal /dev/ttyUSB0 0 0 &&
sleep $2 && setSerialSignal /dev/ttyUSB0 1 1 && 
  echo "One more image captured!" &&
sleep $4;
}
done

echo "Done!"
\end{lstlisting}
\lstset{language=}


Параметры скрипта:

1: задержка поднятия зеркала

2: время выдержки в секундах

3: количество кадров

4: задержка между кадрами

Пример:

\begin{lstlisting}
$ make_captures 4 60 30 2
\end{lstlisting}



Скрипт расчитан на работу с переходником USB-COM, и если у вас другой номер порта - естественно, скрипт нужно немного поправить.


\subsection{Как это работает}
Итак, шнурок спаян, переходник USB-COM включён в USB или сам шнурок вставлен в COM-порт, софт скомпилирован и наделён необходимыми правами. Изложение ориентировано на любую *nix-систему, в данном случае это Debian GNU/Linux.

    * Включаем камеру, переводим её в режим BULB, выставляем значение диафрагмы и ISO, а так же другие параметры при необходимости.

    * Вставляем jack в разъём фотокамеры, а противоположный конец в COM-порт или COM-USB переходник и далее в USB-порт компьютера.

    * Убеждаемся (в случае USB), что переходник опознан и работает: dmesg должен выдать что-то вроде: 

\begin{lstlisting}
usb 2-1: new full speed USB device using uhci_hcd and address 2
usb 2-1: configuration #1 chosen from 1 choice
drivers/usb/serial/usb-serial.c: USB Serial support registered for pl2303
pl2303 2-1:1.0: pl2303 converter detected
usb 2-1: pl2303 converter now attached to ttyUSB0
usbcore: registered new interface driver pl2303
drivers/usb/serial/pl2303.c: Prolific PL2303 USB to serial adaptor driver 
\end{lstlisting}


    * Всё готово, теперь снимаем при помощи команды:

\begin{lstlisting}
$ make_capture 1 5 2 3
\end{lstlisting}


    В этом примере будет сделано 2 кадра с экспозицией 5 секунд, задержка между кадрами 3 секунды, задержка поднятия зеркала 1 секунда.

Следует так же отметить, что таким способом можно отсекать выдержки от 1 секунды и больше по Exif. Физически передавать сигнал можно и быстрее, однако в Exif при этом пишутся неправильные данные. Точно так же, выдержки в данном случае отсекаются с точностью 1 секунда. Впрочем, для установки, которая должна отсекать длинные выдержки, это приемлемо.

Данное устройство с успехом применяется в оптическом эксперименте для снятия изображений с длинной выдержкой. Конкретно: применяется в оптико-цифровом корреляторе. Кроме того, может быть полезно астрономам-любителям для фотографирования астрономических объектов с длительной экспозицией.

Работает на камерах по крайней мере с firmware 1.0.4, имеются частные сообщения, что оригинальная схема должна работать с 400D. Выясняется в настоящее время.

% % Лицензия на материалы этого текста
% 
% Материалы сайта "Записки дебианщика" написаны virens и доступны на условиях лицензии Creative Commons Attribution-Non-Commercial-Share Alike 3.0 Unported License. Вы можете копировать, распространять, показывать эту работу, и создавать производные работы в некоммерческих целях на условиях:
% 
% 1) обязательной ссылки на автора (virens, http://mydebianblog.blogspot.com/) и
% 
% 2) распространении любых производных работ на условиях этой же лицензии (ссылка на эту лицензию 
% обязательна!).
% 
% Пожалуйста соблюдайте условия лицензии.
% 
% This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License. 

\section{Настройка веб-камеры Logitech QuickCam Messenger в Linux}
Давно хотел приобрести подобное устройство (webcam), но было лень и не доходили руки. Пока мой давний друг не подарил мне сие чудо на день рожденья. О том, как с полпинка настроить веб камеру в Linux, будет говориться здесь.

\subsection{Подготовка}
Несколько предварительных замечаний - если вы не собирали сами, можно пропустить эту часть.
Нужно учесть, что видеокамера в Linux - такое же точно видеоустройство, как и TV-Tuner. Поэтому все замечания о настройке TV-Tuner в силе. Если у вас дистрибутивное ядро - там всё уже включено, а для любителей самосборных ядер нужно включить:

    * v4l и все его протоколы (само v4l монолитом, протоколы - модулями)

    * i2c и его протоколы (так же, фактически как при установке ТВ-тюнеров)

Если это в ядре есть, дальнейшее не составит проблем.


\subsection{Установка}
На коробке пишут: установка проста, как раз-два-три. В общем, у меня так и получилось:

\subsubsection{Устанавливаем программное обеспечение}
Запускаем с балкона два прилагающихся диска и вместо этого ставим из репозитория:

\begin{lstlisting}
$ sudo aptitude install gspca-source camorama 
\end{lstlisting}


В каталоге /usr/src появится архив с исходниками gspca-source.tar.bz2 - распаковываем его прямо там. После этого переходим в каталог /usr/src/modules/gspca и там выполняем команду:

\begin{lstlisting}
# make
\end{lstlisting}


Модуль должен собраться без ошибок. Далее пишем:

\begin{lstlisting}
$ sudo make install
\end{lstlisting}


Это установит наш модуль в каталог к другим модулям ядра. На всякий случай, можно после этого написать:

\begin{lstlisting}
# sudo depmod -a
\end{lstlisting}


Всё, время загрузить модуль ядра для вебкамеры:

\begin{lstlisting}
$ sudo modprobe gspca
\end{lstlisting}


Теперь всё готово. Врубаем камеру и запускаем софт.


\subsubsection{Подключаем камеру}
Подключаем USBшный штекер камеры, она мигнёт зелёным светодиодом. На всякий случай смотрим выводы dmesg.

Диагностические выводы показывают, что чип опознан. Теперь должен появиться файл устройства /dev/video0 - это и есть наша вебкамера. После этого запускаем программу по работе с камерами (её мы устанановили на предыдущем шаге):

\begin{lstlisting}
$ camorama
\end{lstlisting}


Если всё было сделано верно, вы увидите видеоизображение в окошке программы и простой интерфейс управления изображением (яркость/контраст, насыщенность, фильтры и прочее). 


